/*
 * @author				: Leandro Gimenez
 * @create				: 12/03/2011
 * @last modified		: 07/08/2011
 * @version				: 2.1
 * @description			: Classe Projeto, responsável por listar os projetos cadastrados
*/


Ext.ns('App.Projeto');
App.Projeto = Ext.extend(Ext.grid.GridPanel,{
	
	id: 'projeto'
	,stripeRows	: true	
	,loadMask	: true
	,autoWidth 	: true
	,layout		: 'fit'
	,border		: false
	
	,constructor: function()
	{
		var controlePaginacao = {
			start: 0,
			limit: 10
		};
		
		
		this.CarregaGrid = new Ext.data.Store({
            reader: new Ext.data.JsonReader({
				fields: [
					{
					    name		: 'codigo'
						,mapping	: 'codigo'
					}
					,{
						name		: 'nome'
						,mapping	: 'nome'
					}
					,{
						name		: 'tipoProjeto'
						,mapping	: 'tipoProjeto'
					}
					,{
						name		: 'dataInicio'
						,mapping	: 'dataInicio'
						,type 		: 'date'
						,dateFormat	: 'Y-m-d'
					}
					,{
						name		: 'dataFim'
						,mapping	: 'dataFim'
						,type 		: 'date'
						,dateFormat	: 'Y-m-d'
					}
					,{
						name		: 'valorEstimadoProjeto'
						,mapping	: 'valorEstimadoProjeto'
					}
					,{
						name		: 'progresso'
						,mapping	: 'progresso'
					}
					,{
						name		: 'situacao'
						,mapping	: 'situacao'
					}
				],
				root: 'elements',
				totalProperty: 'results'
            }),
            proxy: new Ext.data.HttpProxy({
            	url: baseURL + '/service/index.php?controller=ProjetoController&service=listarProjetos',
            	//url: baseURL + '/data/listProjetos.json',
            	method: 'POST'
            }),
			baseParams: controlePaginacao
		});
		
		
		this.pesquisaProjetos = new Ext.app.SearchField({
			store: this.CarregaGrid,
			params: {start: 0, limit: 10},
			width: 280,
			id: 'pesquisaProjetos',
			emptyText: 'Entre com nome'
		});

		
		App.Projeto.superclass.constructor.apply(this, arguments);
	}
		
	
	,initComponent: function()
	{
		this.barButton = new Ext.Toolbar({
			
			items: [
				{
                	text: 'Novo'
                	,handler: this.createRecord
                	,iconCls: 'bt_novo'
                	,ref: 'novoPro'
            	}
            	,{
                	text: 'Editar'
                	,iconCls: 'bt_editar'
                	,handler: this.editRecord
                	,disabled: true
                	,id: 'btEditarProjeto'
            	}
            	,{
                	text: 'Deletar'
                	,iconCls: 'bt_deletar'
                	,handler: this.deleteRecord
                	,disabled: true
                	,ref: 'deletar'
                	,id: 'btDeletarProjeto'
            	}
            	,{xtype: 'tbseparator'}
            	,{
                	text: 'Gerenciar Atividades'
                	,iconCls: 'bt_gerenciar_atividades'
                	,handler: this.gerenciarAtividades
                	,disabled: true
                	,id: 'btGerAtividades'
            	}
            	,{xtype: 'tbseparator'}
            	,{
                	text: 'Gerenciar Custo'
                	,iconCls: 'icon_gerenciar_custos'
                	,handler: this.gerenciarCusto
                	,disabled: true
                	,id: 'btGerCusto'
            	}
            	,{xtype: 'tbseparator'}
            	,{
                	text: 'Matricular Aluno'
                	,iconCls: 'icon_matricular'
                	,handler: this.matricularAluno
                	,disabled: true
                	,id: 'btMatricularAluno'
            	}
            	,{xtype: 'tbseparator'}
            	,{
                	text: 'Gerenciar Dotações'
                	,iconCls: 'icon_gerenciar_dotacoes'
                	,handler: this.gerenciarDotacoes
                	,disabled: true
                	,id: 'btGerenciarDotacoes'
            	}
            	,this.pesquisaProjetos
            	
            ]
		});

		
		//demais atributos do grid
		Ext.apply(this,{
			viewConfig:{
				emptyText		: 'Nenhum registro encontrado'
				,deferEmptyText : false
			}
			,store: this.CarregaGrid
			,tbar: this.barButton
			,width: '100%'
			,bbar: new Ext.PagingToolbar({
                pageSize: 10,
                store: this.CarregaGrid,
                displayInfo: true
            })
			,autoExpandColumn: 'nome'
			,columns:[
				{
					dataIndex	: 'codigo'
					,id			: 'codigo'
					,header		: 'Cod'
					,width		: 50
				}
					
				,{
					dataIndex	: 'nome'
					,id			: 'nome' // necessário id para utilizar autoExpandColumn
					,header		: 'Nome Projeto'
					,width		: 50					
				}
				
				,{
					dataIndex	: 'tipoProjeto'
					,header		: 'Tipo'
					,width		: 150					
				}
				,{
					 dataIndex	: 'dataInicio'
					,header		: 'Início'
					,width		: 150
					,renderer	: Ext.util.Format.dateRenderer('d/m/Y')
				}
				,{
					 dataIndex	: 'dataFim'
					,header		: 'Fim'
					,width		: 150
					,renderer	: Ext.util.Format.dateRenderer('d/m/Y')
				}
				,{
					 dataIndex	: 'valorEstimadoProjeto'
					,header		: 'Est. Custo'
					,width		: 150
					,renderer	: Ext.util.Format.numberRenderer('0.000,00/i')
				}
				,{
					 dataIndex	: 'progresso'
					,header		: 'Progresso'
					,width		: 150
				}
				,{
					 dataIndex	: 'situacao'
					,header		: 'Situação'
					,renderer 	: trataSituacao
				}
			]
			
		})
		
		this.getSelectionModel().on('selectionchange', function(sm){
			Ext.getCmp('btEditarProjeto').setDisabled(sm.getCount() < 1)
			Ext.getCmp('btDeletarProjeto').setDisabled(sm.getCount() < 1)
			Ext.getCmp('btGerAtividades').setDisabled(sm.getCount() < 1)
			Ext.getCmp('btGerCusto').setDisabled(sm.getCount() < 1)
			Ext.getCmp('btMatricularAluno').setDisabled(sm.getCount() < 1)
			Ext.getCmp('btGerenciarDotacoes').setDisabled(sm.getCount() < 1)
		});
			
		App.Projeto.superclass.initComponent.call(this);
	}
	
	
	,matricularAluno: function(){
		var selectedRow = Ext.getCmp('projeto').getSelectionModel().getSelections();
		var objetoProjeto = selectedRow[0].data;
		functionsGridMatricula.Projeto_codigo = objetoProjeto.codigo;
		windowMatricula.show();
	}
	
	,gerenciarAtividades: function(){
		tabAtividade.setActiveTab(0);
		functionsFormAtividade.resetForm();
		windowAtividade.show();
		var selectedRow = Ext.getCmp('projeto').getSelectionModel().getSelections();
		var objetoProjeto = selectedRow[0].data;
		functionsGridAtividade.listaAtividades(objetoProjeto.codigo, objetoProjeto.nome);
	}
	
	,gerenciarCusto: function(){
		windowGerenciarCusto.show();
		var selectedRow = Ext.getCmp('projeto').getSelectionModel().getSelections();
		var objetoProjeto = selectedRow[0].data;
		functionsListAtividadesComCusto.Projeto_codigo = objetoProjeto.codigo;
		functionsListAtividadesComCusto.init();
	}
	
	,carregaGrid: function(){
		var objparams = {
			action: "listarProjetos"
		}
		this.CarregaGrid.load({params : objparams});
	}
	
	,createRecord:function(){
		functionsProjetoForm.init();
		windowProjetoForm.show();
		tabProjeto.setActiveTab(0);
	}
	
	
	,gerenciarDotacoes: function(){
		windowDotacao.show();
		var selectedRow = Ext.getCmp('projeto').getSelectionModel().getSelections();
		var objetoProjeto = selectedRow[0].data;
		functionsListDotacao.Projeto_codigo = objetoProjeto.codigo;
		functionsListDotacao.init();
		
	}
	
	,editRecord: function(){
		
		if(Ext.getCmp('projeto').getSelectionModel().hasSelection()){
			functionsProjetoForm.init();
			var selectedRow = Ext.getCmp('projeto').getSelectionModel().getSelections();
			var objetoProjeto = selectedRow[0].data;
			functionsCarregaProjeto.Projeto_codigo = objetoProjeto.codigo;
			functionsCarregaProjeto.carregaTiposProjeto();
			windowProjetoForm.show();
			tabProjeto.setActiveTab(0);
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Nenhum registro foi selecionado!',
				type: 'warning',
				pause: 3
			});
		}
		
	}
	
	,deleteRecord: function(){
		
		if(Ext.getCmp('projeto').getSelectionModel().hasSelection()){
			
			Ext.MessageBox.confirm('Confirmação de Exclusão','Realmente deseja excluir esse registro?', function(btn)
			{
				if(btn == 'yes')
				{
					var selectedRow = Ext.getCmp('projeto').getSelectionModel().getSelections();
					this.params = "&codigoProjeto=" + selectedRow[0].data.codigo;
					
					Ext.Ajax.request({
						url: baseURL + '/service/index.php?controller=ProjetoController&service=excluir',
						//url: baseURL + '/data/excluiProjeto.json',
						success:  function(result){
						
							var objRetorno = Ext.decode(result.responseText);
							
							if(objRetorno.success == true){
								Ext.ux.MessageBox.flash({
									msg: objRetorno.message,
									type: 'success'
								});
							   
								Ext.getCmp('projeto').carregaGrid();
							}else{
								Ext.ux.MessageBox.flash({
									msg: objRetorno.message,
									type: 'error'
								});
							}
			
						},
						
						params: this.params,
						scope: this			
					});
				}
			}, this);
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Nenhum registro foi selecionado!',
				type: 'warning',
				pause: 3
			});
		}
		
	}

});



Ext.reg('projeto',App.Projeto);

projeto = new App.Projeto()

function writeProjetoProjeto(){
	var myCloseTab = centerTabs.get( 1 );
	if (myCloseTab){
		centerTabs.remove( myCloseTab );
	}
	var title = "Manter projeto";
	var tab = centerTabs.items.find(function(i){return i.title === title;});
	if(!tab) {
		tab = centerTabs.add({
			title:title
			,layout:'fit'
			,items: [ projeto ]
			,closable:true
			,listeners: {
				"afterrender": function(){ // carregamento só é executado depois da tela ser renderizada
					projeto.carregaGrid();
				}
			}
			
		});
	}
	centerTabs.setActiveTab(tab);
	
}
